package com.kexio.dynamic.config.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 动态值注解
 * 
 * 用于字段上，自动注入动态配置值并支持热更新
 * 
 * 使用示例：
 * <pre>
 * &#64;DynamicValue(key = "app.max.connections", defaultValue = "100")
 * private Integer maxConnections;
 * 
 * &#64;DynamicValue(key = "app.feature.enabled", defaultValue = "false", autoRefresh = true)
 * private Boolean featureEnabled;
 * </pre>
 * 
 * @author Kexio
 * @since 1.0.0
 */
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface DynamicValue {

    /**
     * 配置键
     */
    String key();

    /**
     * 默认值
     */
    String defaultValue() default "";

    /**
     * 是否自动刷新
     * 当配置发生变化时，是否自动更新字段值
     */
    boolean autoRefresh() default true;

    /**
     * 刷新间隔（秒）
     * 0表示实时刷新
     */
    int refreshInterval() default 0;

    /**
     * 值类型
     * 支持：string, int, long, double, boolean, json
     */
    String type() default "string";

    /**
     * 是否必需
     * 如果为true，当配置不存在且无默认值时会抛出异常
     */
    boolean required() default false;

    /**
     * 配置分组
     * 用于批量刷新
     */
    String group() default "";

    /**
     * 配置描述
     */
    String description() default "";
}
